import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 存储输入的行内容
        List<String> lines = new ArrayList<>();
        // 倒排索引：单词 -> 行号集合
        Map<String, TreeSet<Integer>> invertedIndex = new TreeMap<>();

        // 输入若干行英文，以 "!!!!!" 结束
        while (true) {
            String line = scanner.nextLine();
            if ("!!!!!".equals(line)) {
                break;
            }
            lines.add(line); // 保存当前行
            int lineNumber = lines.size(); // 当前行号
            String[] words = line.toLowerCase().split("\\s+"); // 按空格分割单词并转为小写

            for (String word : words) {
                invertedIndex.putIfAbsent(word, new TreeSet<>()); // 如果不存在则创建新的集合
                invertedIndex.get(word).add(lineNumber); // 将行号添加到对应单词的集合中
            }
        }

        // 输出倒排索引
        for (Map.Entry<String, TreeSet<Integer>> entry : invertedIndex.entrySet()) {
            System.out.println(entry.getKey() + "=" + entry.getValue());
        }

        // 查询关键字
        while (scanner.hasNextLine()) {
            String query = scanner.nextLine().trim();
            if (query.isEmpty()) {
                break; // 空行结束查询
            }

            String[] keywords = query.toLowerCase().split("\\s+"); // 按空格分割关键字
            Set<Integer> result = null;

            // 遍历每个关键字，取交集
            for (String keyword : keywords) {
                if (!invertedIndex.containsKey(keyword)) {
                    result = Collections.emptySet(); // 如果某个关键字不存在，直接返回空结果
                    break;
                }
                if (result == null) {
                    result = new HashSet<>(invertedIndex.get(keyword)); // 初始化结果集
                } else {
                    result.retainAll(invertedIndex.get(keyword)); // 取交集
                }
            }

            // 输出查询结果
            if (result == null || result.isEmpty()) {
                System.out.println("found 0 results");
            } else {
                List<Integer> sortedResult = new ArrayList<>(result);
                Collections.sort(sortedResult); // 按行号升序排序
                System.out.println(sortedResult);

                // 输出对应的行内容
                for (int lineNumber : sortedResult) {
                    System.out.println("line " + lineNumber + ":" + lines.get(lineNumber - 1));
                }
            }
        }

        scanner.close();
    }
}